package com.shujia.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo15Submit {
  def main(args: Array[String]): Unit = {

    /**
     * 代码提交到集群运行方式
     * 1、注释local
     * 2、修改数据路径，改成HDFS的路径，输入输出目录都需要修改i
     * 3、将代码打包上传到服务器运行
     */

    //1、创建spark环境
    //创建配置文件对象
    val conf = new SparkConf()
    //指定spark执行默认，local：本地执行
    //conf.setMaster("local")
    //spark 任务名
    conf.setAppName("wc")
    //创建spark上下文对象
    val sc = new SparkContext(conf)

    //2、读取数据
    //RDD:弹性的分布式数据集
    val lines: RDD[String] = sc.textFile("/data/words")

    //3、将一行转换成多行
    val words: RDD[String] = lines.flatMap(line => line.split(","))


    //4、转换成kv格式
    val kvs: RDD[(String, Int)] = words.map(word => (word, 1))

    //5、统计单词的数量
    //reduceByKey通过key对value进行聚合计算,底层会产生shuffle
    val counts: RDD[(String, Int)] = kvs.reduceByKey((x, y) => x + y)

    //6、将计算结果保存到文件中
    counts.saveAsTextFile("/data/word_count")
  }
}
